home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xsw / util.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-09  |  11.7 KB  |  511 lines

  1. /*
  2.  *    @(#) util.c 12.1 95/05/09 SCOINC
  3.  */
  4. /***************************************************************************
  5.  *
  6.  *    Copyright (c) 1990-1993        The Santa Cruz Operation, Inc.
  7.  *
  8.  *    All rights reserved.  No part of this program or publication may be
  9.  *    reproduced, transmitted, transcribed, stored in a retrieval system,
  10.  *    or translated into any language or computer language, in any form or
  11.  *    by any means, electronic, mechanical, magnetic, optical, chemical,
  12.  *    biological, or otherwise, without the prior written permission of:
  13.  *
  14.  *        The Santa Cruz Operation , Inc.        (408) 425-7222
  15.  *        400 Encinal St., Santa Cruz, California 95060 USA
  16.  *
  17.  **************************************************************************/
  18. /*
  19.  * Modification History
  20.  * S004, 15-Sep-93, rickra
  21.  *     Minor bug fix...
  22.  *
  23.  * S003, 01-June-93, rickra
  24.  *     Moved a debugging comment inside the #define for debugging....
  25.  *
  26.  * S002, 27-May-93, rickra
  27.  *     User color was set wrong.....
  28.  *
  29.  * S001, 27-May-93, rickra
  30.  *     Moved some functions here....
  31.  *    Create a common interface to read/write to server....
  32.  *
  33.  * S000, 30-Sep-92, rickra
  34.  *     Added copyright and modification history
  35.  */
  36. /*+-------------------------------------------------------------------------
  37.     util.c - XSW utility functions
  38.  
  39.   Defined functions:
  40.     basename(fullname)
  41.     get_elapsed_time(elapsed_seconds)
  42.  
  43. --------------------------------------------------------------------------*/
  44.  
  45. #include <sys/types.h>
  46. #include <X11/Intrinsic.h>
  47. #include <Xm/Text.h>
  48. #include <Xm/Xm.h>
  49. #include "include/unixincs.h"
  50. #include "include/buttons.h"
  51. #include "include/xsw.h"
  52.  
  53.  
  54. extern struct NetworkXswStruct *selected_server;
  55. extern Widget   message_text_widget;
  56. extern Widget   actual_interval_text_widget;
  57. extern Widget   target_interval_text_widget;
  58. extern Widget   user_text_widget;
  59. extern Widget   TOGGLE_BUTTONS_WIDGETS[Max_state_buttons];
  60.  
  61. extern int      errno;
  62.  
  63.  
  64. void
  65. display_network_msg (server_pointer, message)
  66.      struct NetworkXswStruct *server_pointer;
  67.      char           *message;
  68. {
  69.  
  70.   int             argcount;
  71.   Arg             args[5];
  72.  
  73.  
  74.   if (server_pointer != NULL)
  75.     server_pointer -> message = message;
  76.  
  77.   argcount = 0;
  78.   XtSetArg (args[argcount], XmNcursorPosition, strlen (message));
  79.   argcount++;
  80.   XtSetArg (args[argcount], XmNforeground, colorDisplayMsg.pixel);
  81.   argcount++;
  82.   XtSetArg (args[argcount], XmNvalue, message);
  83.   argcount++;
  84.   XtSetValues (message_text_widget, args, argcount);
  85.  
  86.   XmTextShowPosition (message_text_widget, strlen (message));
  87.  
  88.  
  89. }
  90.  
  91. void
  92.  
  93. clear_StatPeriod ()
  94.  
  95. {
  96.   Arg             args[5];
  97.   int             argcount;
  98.  
  99.  
  100.   argcount = 0;
  101.   XtSetArg (args[argcount], XmNcursorPosition, strlen (""));
  102.   argcount++;
  103.   XtSetArg (args[argcount], XmNvalue, "");
  104.   argcount++;
  105.   XtSetValues (actual_interval_text_widget, args, argcount);
  106.  
  107.   XmTextShowPosition (actual_interval_text_widget, strlen (""));
  108.  
  109. }
  110.  
  111. void
  112. clear_StatCycle ()
  113.  
  114. {
  115.   Arg             args[5];
  116.   int             argcount;
  117.  
  118.   argcount = 0;
  119.   XtSetArg (args[argcount], XmNcursorPosition, strlen (""));
  120.   argcount++;
  121.   XtSetArg (args[argcount], XmNvalue, "");
  122.   argcount++;
  123.   XtSetValues (target_interval_text_widget, args, argcount);
  124.  
  125.   XmTextShowPosition (target_interval_text_widget, strlen (""));
  126.  
  127.  
  128. }
  129.  
  130. /*+-------------------------------------------------------------------------
  131.         clear_Users()
  132. --------------------------------------------------------------------------*/
  133. void
  134. clear_Users ()
  135. {
  136.  
  137.   char            users[12];
  138.   Arg             args[32];
  139.   int             argcount;
  140.  
  141.  
  142.   argcount = 0;
  143.   XtSetArg (args[argcount], XmNcursorPosition, strlen (""));
  144.   argcount++;
  145.   XtSetArg (args[argcount], XmNvalue, "");
  146.   argcount++;
  147.   XtSetValues (user_text_widget, args, argcount);
  148.  
  149. }                /* end of update_Users */
  150.  
  151.  
  152.  
  153.  
  154. /*+-------------------------------------------------------------------------
  155.         update_StatPeriod()
  156. --------------------------------------------------------------------------*/
  157. void
  158. update_StatPeriod (server_pointer)
  159.      struct NetworkXswStruct *server_pointer;
  160. {
  161.   char            msecstr[32];
  162.   int             pct = 0;
  163.   unsigned long   pixel;
  164.   Arg             args[32];
  165.   int             argcount;
  166.  
  167.   if (server_pointer != NULL)
  168.     {
  169.  
  170.       if (server_pointer == selected_server)
  171.     {
  172.       pct = (server_pointer -> StatPeriod_msec * 100) / server_pointer -> StatCycle_msec;
  173.  
  174.       if (server_pointer -> StatPeriod_msec < 50)
  175.         strcpy (msecstr, "--------");
  176.       else
  177.         sprintf (msecstr, "%7ldms", server_pointer -> StatPeriod_msec);
  178.  
  179.       if ((pct < 70) || (pct > 130))
  180.         pixel = colorActualIntervalAlarm.pixel;
  181.       else if ((pct < 90) || (pct > 110))
  182.         pixel = colorActualIntervalWarning.pixel;
  183.       else
  184.         pixel = colorActualInterval.pixel;
  185.  
  186.       argcount = 0;
  187.       XtSetArg (args[argcount], XmNcursorPosition, strlen (msecstr));
  188.       argcount++;
  189.       XtSetArg (args[argcount], XmNforeground, pixel);
  190.       argcount++;
  191.       XtSetArg (args[argcount], XmNvalue, msecstr);
  192.       argcount++;
  193.       XtSetValues (actual_interval_text_widget, args, argcount);
  194.  
  195.       XmTextShowPosition (actual_interval_text_widget, strlen (msecstr));
  196.  
  197.     }
  198.     }
  199.  
  200. }                /* end of update_StatPeriod */
  201.  
  202.  
  203. /*+-------------------------------------------------------------------------
  204.         update_StatCycle()
  205. --------------------------------------------------------------------------*/
  206. void
  207. update_StatCycle (server_pointer)
  208.      struct NetworkXswStruct *server_pointer;
  209. {
  210.   char            msecstr[80];
  211.   char            current_target[80];
  212.  
  213.   char            *current_target2;
  214.  
  215.   Arg             args[32];
  216.   int             argcount;
  217.   XmString        message;
  218.  
  219.   int             temp;
  220.   int             temp1;
  221.   int             temp3;
  222.   int             x;
  223.   int             y;
  224.  
  225.  
  226.   if (server_pointer != NULL)
  227.     {
  228.       if (server_pointer == selected_server)
  229.     {
  230.  
  231.       sprintf (msecstr, "%6ldms", server_pointer -> StatCycle_msec);
  232.       message = XmStringCreateSimple (msecstr);
  233.  
  234. /*
  235.       argcount = 0;
  236.       XtSetArg (args[argcount], XmNvalue, ¤t_target);
  237.       argcount++;
  238.       XtGetValues (target_interval_text_widget, args, argcount);
  239.  
  240.       argcount = 0;
  241.       XtSetArg (args[argcount], XmNvalue, current_target2);
  242.       argcount++;
  243.       XtGetValues (target_interval_text_widget, args, argcount);
  244.     
  245.       fprintf(stdout,"Current target = %s\n",current_target);
  246.       fprintf(stdout,"Current target2 = %s\n",current_target2);
  247.       free(current_target2);
  248.  
  249.       if (strcmp(current_target,msecstr) == 0 )
  250.         {
  251.           fprintf(stdout,"Target is the same!!!");
  252.  
  253.         }
  254.       else
  255.           fprintf(stdout,"Target is NOT the same!!!");
  256. */
  257.  
  258.  
  259.       argcount = 0;
  260.       XtSetArg (args[argcount], XmNcursorPosition, strlen (msecstr));
  261.       argcount++;
  262.       XtSetArg (args[argcount], XmNforeground, colorInterval.pixel);
  263.       argcount++;
  264.       XtSetArg (args[argcount], XmNvalue, msecstr);
  265.       argcount++;
  266.       XtSetValues (target_interval_text_widget, args, argcount);
  267.  
  268.       XmTextShowPosition (target_interval_text_widget, strlen (msecstr));
  269.     }
  270.     }
  271. }                /* end of update_StatCycle */
  272.  
  273. /*+-------------------------------------------------------------------------
  274.         update_Users(server_pointer)
  275. --------------------------------------------------------------------------*/
  276. void
  277. update_Users (server_pointer)
  278.      struct NetworkXswStruct *server_pointer;
  279. {
  280.  
  281.   char            users[12];
  282.   Arg             args[32];
  283.   int             argcount;
  284.  
  285.  
  286.   if (server_pointer != NULL)
  287.     {
  288.  
  289.       if (server_pointer == selected_server)
  290.     {
  291.       sprintf (users, "%7d", server_pointer -> user_data_pointer);
  292.  
  293.       argcount = 0;
  294.       XtSetArg (args[argcount], XmNcursorPosition, strlen (users));
  295.       argcount++;
  296.       XtSetArg (args[argcount], XmNforeground, colorUser.pixel);
  297.       argcount++;
  298.       XtSetArg (args[argcount], XmNvalue, users);
  299.       argcount++;
  300.       XtSetValues (user_text_widget, args, argcount);
  301.     }
  302.     }
  303.  
  304. }                /* end of update_Users */
  305.  
  306.  
  307.  
  308. void
  309. toggle_button_reset (w, client_data, call_data)
  310.      Widget          w;
  311.      caddr_t         client_data;
  312.      XmAnyCallbackStruct *call_data;
  313. {
  314.   Arg             args[2];
  315.   int             argcount;
  316.   int             button_num = (int) client_data;
  317.  
  318.   argcount = 0;
  319.   XtSetArg (args[argcount], XmNset, False);
  320.   argcount++;
  321.   XtSetValues (TOGGLE_BUTTONS_WIDGETS[button_num], args, argcount);
  322.  
  323. }
  324.  
  325.  
  326. /*+-------------------------------------------------------------------------
  327.     basename(fullname) - strip directory name from filename
  328.  
  329. returns address of static string
  330. --------------------------------------------------------------------------*/
  331. char           *
  332. basename (fullname)
  333.      char           *fullname;
  334. {
  335.   register char  *start;
  336.   static char     outstr[256];
  337.   char           *strrchr ();
  338.  
  339.   start = strrchr (fullname, '/');    /* find last slash */
  340.   if (!start)
  341.     return (fullname);
  342.   start++;
  343.   strcpy (outstr, start);
  344.   return (outstr);
  345. }                /* end of basename */
  346.  
  347. #ifdef get_elapsed_time
  348. /*+-----------------------------------------------------------------------
  349.     char *get_elapsed_time(elapsed_seconds) - "ddd+hh:mm:ss" returned
  350.   static string address is returned
  351. ------------------------------------------------------------------------*/
  352. char           *
  353. get_elapsed_time (elapsed_seconds)
  354.      time_t          elapsed_seconds;
  355. {
  356.   static char     elapsed_time_str[32];
  357.   time_t          dd, hh, mm, ss;
  358.  
  359.   dd = 0;
  360.   hh = elapsed_seconds / 3600;
  361.   if (hh > 24)
  362.     {
  363.       dd = hh / 24;
  364.       elapsed_seconds -= dd * 3600 * 24;
  365.       hh %= 24;
  366.     }
  367.   elapsed_seconds -= hh * 3600;
  368.   mm = elapsed_seconds / 60L;
  369.   elapsed_seconds -= mm * 60L;
  370.   ss = elapsed_seconds;
  371.  
  372.   if (dd)
  373.     (void) sprintf (elapsed_time_str, "%3ld+%02ld:%02ld:%02ld", dd, hh, mm, ss);
  374.   else
  375.     (void) sprintf (elapsed_time_str, "    %2ld:%02ld:%02ld", hh, mm, ss);
  376.   return (elapsed_time_str);
  377. }                /* end of get_elapsed_time */
  378.  
  379. #endif
  380.  
  381. char           *
  382. cs_to_rs (cs)
  383.      XmString        cs;
  384. {
  385.   XmStringContext context;
  386.   XmStringCharSet charset;
  387.   XmStringDirection direction;
  388.   Boolean         separator;
  389.   char           *primitive_string;
  390.  
  391.   XmStringInitContext (&context, cs);
  392.   XmStringGetNextSegment (context, &primitive_string,
  393.               &charset, &direction, &separator);
  394.   XmStringFreeContext (context);
  395.   return (primitive_string);
  396. }
  397.  
  398. xsw_write (server_pointer, FD, data_wanted, data_size)
  399.      struct NetworkXswStruct *server_pointer;
  400.      int             FD;
  401.      int             data_wanted;
  402.      int             data_size;
  403.  
  404. {
  405.   int             result;
  406. /*
  407. fprintf (stdout, "data_wanted = %d\n",data_wanted);
  408.  
  409.   if ( server_pointer -> connected == 0 )
  410.     fprintf (stdout, "server_pointer = 0!!!\n");
  411. */
  412.  
  413.   if (server_pointer != NULL)
  414.     {
  415. /*
  416.  * If we are still in contact with the server.....
  417.  */
  418.  
  419.       if (server_pointer -> connected)
  420.     {
  421.  
  422.       result = write (FD, &data_wanted, data_size);
  423.  
  424.       if (result < 0)
  425.         {
  426.           server_pointer -> connected = 0;
  427. #ifdef DEBUG_NET_READ
  428.           fprintf (stdout, "SHIT\n");
  429. #endif
  430.         }
  431.       else
  432.         {
  433.  
  434.         }
  435.     }
  436.     }
  437.  
  438. }
  439.  
  440.  
  441. xsw_read (server_pointer, FD, data_pointer, data_size)
  442.      struct NetworkXswStruct *server_pointer;
  443.      int             FD;
  444.      char           *data_pointer;
  445.      int             data_size;
  446.  
  447. {
  448.  
  449.   int             bytes_read = 1;
  450.   int             total_read = 0;
  451.  
  452. #ifdef DEBUG_NET_READ
  453.   fprintf (stdout, "Data size = %d\n", data_size);
  454. #endif
  455.  
  456.  
  457. /*
  458.   if (server_pointer -> connected == 0)
  459.     fprintf (stdout, "server_pointer = 0!!!\n");
  460. */
  461.  
  462.  
  463.   if (server_pointer != NULL)
  464.     {
  465.  
  466.       while ((total_read != data_size) && (bytes_read > 0))
  467.     {
  468.  
  469. /*
  470.  * Read in, starting at address "data_pointer" + "offset"
  471.  */
  472.  
  473.       bytes_read = read (FD,
  474.                  data_pointer + total_read,
  475.                  data_size);
  476.  
  477. #ifdef DEBUG_NET_READ
  478.       fprintf (stdout, "bytes_read= %d\n", bytes_read);
  479. #endif
  480.  
  481.       if (bytes_read <= 0)
  482.         {
  483.           server_pointer -> connected = 0;
  484. #ifdef DEBUG_NET_READ
  485.           fprintf (stdout, "OHOH\n");
  486. #endif
  487.  
  488.         }
  489.  
  490.       else
  491.         {
  492.  
  493.           total_read += bytes_read;
  494.  
  495.         }
  496.  
  497. #ifdef DEBUG_NET_READ
  498.       fprintf (stdout, "total_read = %d\n", total_read);
  499. #endif
  500.  
  501.     }
  502.  
  503.     }
  504.  
  505. }
  506.  
  507.  
  508.  
  509. /* vi: set tabstop=4 shiftwidth=4: */
  510. /* end of util.c */
  511.